package com.cnap.service;

import com.cnap.db.entity.ClusterInfoPO;
import com.cnap.db.entity.DeployClusterPO;
import com.cnap.db.entity.MicroServicePO;
import com.cnap.model.schedule.UpdateUserChooseParam;
import com.cnap.model.schedule.engine.EngineClusterInfo;
import com.cnap.model.schedule.engine.alg.AlgDeployClusterInfo;

import java.util.List;

/**
 * 集群信息服务类
 *
 * @author xc
 **/
public interface ClusterInfoService {
    // V2.0 start

    /**
     * 保存部署信息
     *
     * @param deployClusterPO 集群信息
     */
    void saveDeployCluster(DeployClusterPO deployClusterPO);

    /**
     * 根据微服务id查询部署信息
     *
     * @param svcId 微服务id
     * @return 结果
     */
    List<DeployClusterPO> getDeployClusterBySvcId(String svcId);

    /**
     * 根据服务id删除
     *
     * @param svcId 微服务id
     */
    void deleteDeployClusterBySvcId(String svcId);

    /**
     * 根据微服务id和集群名称删除
     *
     * @param svcId       微服务id
     * @param clusterName 集群名称
     */
    void deleteDeployClusterBySvcIdAndClusterName(String svcId, String clusterName);

    // V2.0 end

    /**
     * 插入或更新集群信息
     *
     * @param microServicePO 服务信息
     * @param clusterInfos   集群信息
     */
    void saveOrUpdateClusterInfo(MicroServicePO microServicePO, List<EngineClusterInfo> clusterInfos);

    /**
     * 插入或更新集群信息
     *
     * @param microServicePO 微服务信息
     * @param clusterInfoPO  集群信息
     */
    void saveOrUpdateClusterInfo(MicroServicePO microServicePO, ClusterInfoPO clusterInfoPO);

    /**
     * @param svcId                 服务id
     * @param algDeployClusterInfos 信息
     */
    void updateAlgDeployInfos(String svcId, List<AlgDeployClusterInfo> algDeployClusterInfos);

    /**
     * 根据svcId删除集群信息
     *
     * @param svcId 服务id
     */
    void deleteClusterInfoBySvcId(String svcId);

    /**
     * 根据应用id查询集群信息
     *
     * @param appId 应用id
     * @return 结果
     */
    List<ClusterInfoPO> getClusterInfosByAppId(String appId);

    /**
     * 根据服务id（数据库id）查询集群信息
     *
     * @param svcId 服务id
     * @return 结果
     */
    ClusterInfoPO getClusterInfoBySvcId(String svcId);

    /**
     * 更新用户选择
     *
     * @param param 参数
     */
    void updateUserChooseCloud(UpdateUserChooseParam param);

    /**
     * 根据用户选择云商查询所有的集群信息
     *
     * @param userChooseCloud 用户选择云商
     * @return 结果
     */
    List<ClusterInfoPO> getClusterInfoByUserChooseCloud(String userChooseCloud);

}
